home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 10
/
AACD 10.iso
/
AACD
/
Resources
/
General
/
ProNET
/
src
/
src
/
pronet-stop.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-01-26
|
3KB
|
112 lines
/*
pronet-stop.c
Dieses Programm wuselt in irgendwelchen obstrusen Datenstrukturen rum ;)=
*/
#include <string.h>
#include <exec/execbase.h>
#include <dos/dos.h>
#include <dos/filehandler.h>
#include <proto/exec.h>
#include <proto/dos.h>
void __chkabort(void) {} /* Disable CTRL-C handling */
ULONG __nocommandline = 0;
static char template[]="DEVICENAME,UNIT/K/N";
static LONG array[2];
static const char handlername[]="l:pronet-handler";
char versiontag[] = "$VER: pronet-stop 38.0 (26.1.97)";
static LONG stop_pronet_dev(struct DosList *dl)
{
struct DosPacket *dospacket;
struct MsgPort *rp;
struct FileSysStartupMsg* fssm;
LONG err = 0;
if(rp = CreateMsgPort()) {
if(dospacket = AllocDosObject(DOS_STDPKT, NULL)) {
dospacket->dp_Port = rp;
dospacket->dp_Type = ACTION_DIE;
PutMsg(dl->dol_Task, dospacket->dp_Link);
WaitPort(rp);
GetMsg(rp);
FreeDosObject(DOS_STDPKT, dospacket);
}
else err=ERROR_NO_FREE_STORE;
DeleteMsgPort(rp);
}
else err=ERROR_NO_FREE_STORE;
return(err);
}
int main()
{
struct RDArgs *rdargs;
struct DosList *dl;
int RC = 20;
if(rdargs = ReadArgs(template,&array[0],NULL)) {
if(array[0]) {
dl = LockDosList(LDF_DEVICES|LDF_READ);
dl = FindDosEntry(dl, (char*)array[0], LDF_DEVICES);
UnLockDosList(LDF_DEVICES|LDF_READ);
if(dl) {
if(((char*)BADDR(dl->dol_misc.dol_handler.dol_Handler))[0] == sizeof(handlername)-1
&& !strcmp(BADDR(dl->dol_misc.dol_handler.dol_Handler)+1, handlername)) {
LONG err = stop_pronet_dev(dl);
if(err)
PrintFault(err, NULL);
else
RC = 0;
}
else
Printf("Device `%s:' is not a ProNET device.\n",array[0]);
}
else
Printf("Device `%s:' not found on this machine.\n",array[0]);
}
else if(array[1]) {
RC = 0;
do {
dl = LockDosList(LDF_DEVICES|LDF_READ);
while((dl = NextDosEntry(dl, LDF_DEVICES))
&& !(((char*)BADDR(dl->dol_misc.dol_handler.dol_Handler))[0] == sizeof(handlername)-1
&& !strcmp(BADDR(dl->dol_misc.dol_handler.dol_Handler)+1, handlername)
&& ((struct FileSysStartupMsg*)BADDR(dl->dol_misc.dol_handler.dol_Startup))->fssm_Unit == *(LONG*)array[1]));
UnLockDosList(LDF_DEVICES|LDF_READ);
if(dl) {
LONG err;
Printf("Stopping %s:...\n", 1+(ULONG)BADDR(dl->dol_Name));
if(err = stop_pronet_dev(dl)) {
PrintFault(err, NULL);
RC = 20;
break;
}
}
} while(dl);
}
else
Printf("Need device name or unit number!\n");
FreeArgs(rdargs);
}
else
PrintFault(IoErr(), NULL);
return(RC);
}